package com.fduss.sota.service.impl;

import com.fduss.sota.dao.RiskCheckTemplateItemDao;
import com.fduss.sota.domain.RiskCheckTemplateItem;
import com.fduss.sota.service.RiskCheckTemplateItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;

import java.util.List;

/**
 * @Author duocai
 * @Date 2017/6/3
 * @Time 20:39
 */
@Service
@Transactional
public class RiskCheckTemplateItemServiceImpl implements RiskCheckTemplateItemService {


    private final RiskCheckTemplateItemDao riskCheckTemplateItemDao;

    @Autowired
    public RiskCheckTemplateItemServiceImpl(RiskCheckTemplateItemDao riskCheckTemplateItemDao) {

        this.riskCheckTemplateItemDao = riskCheckTemplateItemDao;
    }

    @Override
    public boolean add(RiskCheckTemplateItem riskCheckTemplateItem) {
        checkTemplateItem(riskCheckTemplateItem);
        return riskCheckTemplateItemDao.save(riskCheckTemplateItem) != null;
    }

    @Override
    public boolean add(List<RiskCheckTemplateItem> riskCheckTemplateItems) {
        for (RiskCheckTemplateItem item:
             riskCheckTemplateItems) {
         checkTemplateItem(item);
        }
        return riskCheckTemplateItemDao.save(riskCheckTemplateItems) != null;
    }

    @Override
    public boolean delete(RiskCheckTemplateItem riskCheckTemplateItem) {
        riskCheckTemplateItemDao.delete(riskCheckTemplateItem);
        return true;
    }

    @Override
    public boolean delete(Long id) {
        riskCheckTemplateItemDao.delete(id);
        return true;
    }

    @Override
    public boolean deleteAll() {
        riskCheckTemplateItemDao.deleteAll();
        return true;
    }

    @Override
    public boolean update(RiskCheckTemplateItem riskCheckTemplateItem) {
        checkTemplateItem(riskCheckTemplateItem);
        if (riskCheckTemplateItemDao.findOne(riskCheckTemplateItem.getId()) != null) {
            return riskCheckTemplateItemDao.save(riskCheckTemplateItem) != null;
        }
        return false;
    }

    @Override
    public List<RiskCheckTemplateItem> getAll() {
        return riskCheckTemplateItemDao.findAll();
    }

    @Override
    public RiskCheckTemplateItem get(Long id) {
        return riskCheckTemplateItemDao.getOne(id);
    }

    @Override
    public Page<RiskCheckTemplateItem> getPage(int pageOffset, int pageSize) {
        Pageable page = new PageRequest(pageOffset, pageSize);
        return riskCheckTemplateItemDao.findAll(page);
    }

    @Override
    public List<RiskCheckTemplateItem> searchTemplateItems(String key) {
        return riskCheckTemplateItemDao.getRiskCheckTemplateItemsByContentContainingOrNameContaining(key, key);
    }

    private void checkTemplateItem(RiskCheckTemplateItem riskCheckTemplateItem) {
        Assert.notNull(riskCheckTemplateItem.getName(),
                "The name property must not be null");
        Assert.notNull(riskCheckTemplateItem.getContent(),
                "the content property must not be null");
    }
}
